home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- from test.test_support import verbose, TESTFN
- import random
- import os
- dict1 = { }
- dict2 = { }
- dict1keys = []
- dict2keys = []
- mutate = 0
-
- def maybe_mutate():
- global mutate, mutate
- if not mutate:
- return None
-
- if random.random() < 0.5:
- return None
-
- if random.random() < 0.5:
- target = dict1
- keys = dict1keys
- else:
- target = dict2
- keys = dict2keys
- if random.random() < 0.20000000000000001:
- mutate = 0
- while None:
- newkey = Horrid(random.randrange(100))
- if newkey not in target:
- break
- continue
- target[newkey] = Horrid(random.randrange(100))
- keys.append(newkey)
- mutate = 1
- elif keys:
- i = random.randrange(len(keys))
- key = keys[i]
- del target[key]
- del keys[i]
-
-
-
- class Horrid:
-
- def __init__(self, i):
- self.i = i
- self.hashcode = random.randrange(1000000000)
-
-
- def __hash__(self):
- return self.hashcode
-
-
- def __cmp__(self, other):
- maybe_mutate()
- return cmp(self.i, other.i)
-
-
- def __repr__(self):
- return 'Horrid(%d)' % self.i
-
-
-
- def fill_dict(d, candidates, numentries):
- d.clear()
- for i in xrange(numentries):
- d[Horrid(random.choice(candidates))] = Horrid(random.choice(candidates))
-
- return d.keys()
-
-
- def test_one(n):
- global mutate, dict1keys, dict2keys, mutate
- mutate = 0
- dict1keys = fill_dict(dict1, range(n), n)
- dict2keys = fill_dict(dict2, range(n), n)
- mutate = 1
- if verbose:
- print 'trying w/ lengths', len(dict1), len(dict2),
-
- while dict1 and len(dict1) == len(dict2):
- if verbose:
- print '.',
-
- c = cmp(dict1, dict2)
- if verbose:
- print
-
-
-
- def test(n):
- for i in xrange(n):
- test_one(random.randrange(1, 100))
-
-
- test(100)
-
- class Child:
-
- def __init__(self, parent):
- self.__dict__['parent'] = parent
-
-
- def __getattr__(self, attr):
- self.parent.a = 1
- self.parent.b = 1
- self.parent.c = 1
- self.parent.d = 1
- self.parent.e = 1
- self.parent.f = 1
- self.parent.g = 1
- self.parent.h = 1
- self.parent.i = 1
- return getattr(self.parent, attr)
-
-
-
- class Parent:
-
- def __init__(self):
- self.a = Child(self)
-
-
- f = open(TESTFN, 'w')
- print >>f, Parent().__dict__
- f.close()
- os.unlink(TESTFN)
- dict = { }
- for i in range(1, 10):
- dict[i] = i
-
- f = open(TESTFN, 'w')
-
- class Machiavelli:
-
- def __repr__(self):
- dict.clear()
- print >>f
- return `'machiavelli'`
-
-
- def __hash__(self):
- return 0
-
-
- dict[Machiavelli()] = Machiavelli()
- print >>f, str(dict)
- f.close()
- os.unlink(TESTFN)
- del f
- del dict
- dict = { }
- for i in range(1, 10):
- dict[i] = i
-
-
- class Machiavelli2:
-
- def __eq__(self, other):
- dict.clear()
- return 1
-
-
- def __hash__(self):
- return 0
-
-
- dict[Machiavelli2()] = Machiavelli2()
-
- try:
- dict[Machiavelli2()]
- except KeyError:
- pass
-
- del dict
- dict = { }
- for i in range(1, 10):
- dict[i] = i
-
-
- class Machiavelli3:
-
- def __init__(self, id):
- self.id = id
-
-
- def __eq__(self, other):
- if self.id == other.id:
- dict.clear()
- return 1
- else:
- return 0
-
-
- def __repr__(self):
- return '%s(%s)' % (self.__class__.__name__, self.id)
-
-
- def __hash__(self):
- return 0
-
-
- dict[Machiavelli3(1)] = Machiavelli3(0)
- dict[Machiavelli3(2)] = Machiavelli3(0)
- f = open(TESTFN, 'w')
-
- try:
- print >>f, dict[Machiavelli3(2)]
- except KeyError:
- pass
- finally:
- f.close()
- os.unlink(TESTFN)
-
- del dict
-